import re, webbrowser
import tkinter.messagebox as msgbox
import tkinter as tk
from urllib import parse
from tkinter import ttk



def add_channels():
    # 添加渠道
    return {
        "旧-金桥解析": "http://jqaaa.com/jx.php?url=",
        "旧-免费vip": "http://vip.jlsprh.com/index.php?url=",
        "旧-18云解析": "http://api.nobij.top/jx/?url=",
        "旧-无名小站": "http://www.wmxz.wang/video.php?url=",
        "新增-plm3": "https://www.playm3u8.cn/jiexi.php?url=",
        "新增-爱酷": "https://www.ikukk.com/?url=",
        "新增-TV": "http://vip.tvyb10.com/",
        "最全线路":"https://www.eggvod.cn/jxjx.php?lrspm=27188611&zhm_jx="
    }





class VipVideo:
    def __init__(self):
        self.channels = add_channels() #渠道

        self.window = tk.Tk()
        self.window.title('全网视频播放')
        ##窗口尺寸
        self.window.geometry('380x300')
        self.window.resizable(0, 0)  # 防止用户调整尺寸

        # 新建一个label
        lb2 = tk.Label(self.window, text="请选择播放源 ↓↓↓", font="tahoma 18 normal")
        lb2.place(x=10, y=10)

        # 定义 tkinter 数据类型
        data2 = list(self.channels.keys())

        # 创建一个组合框，并将其收紧到值
        self.cbx_2 = ttk.Combobox(
            master=self.window,
            height=10,  # 高度,下拉显示的条目数量
            width=30,  # 宽度
            state='normal',  # 设置状态 normal(可选可输入)、readonly(只可选)、 disabled
            cursor='arrow',  # 鼠标移动时样式 arrow, circle, cross, plus...
            font=('', 16),  # 字体
            values=data2 # 将数据添加到组合框
        )
        self.cbx_2.place(x=10, y=50)
        # 设置只读
        self.cbx_2.configure(state="readonly")

        # 设置初始数据 [index =4] 以在 画布 生成时显示
        self.cbx_2.current(4)
        # 绑定事件， 不绑定不能获取选项值
        # self.cbx_2.bind("<<ComboboxSelected>>", self.video_play)

        # 访问地址保存
        self.url = tk.StringVar()  # str
        get_url = tk.Label(self.window, text="请输入视频链接 ↓↓↓",font="tahoma 18 normal")
        get_url.place(x=10,y=110)
        entry = tk.Entry(self.window, textvariable=self.url, font=16, width=35)
        entry.place(x=10, y=150)

        button = tk.Button(self.window,text="点击播放", width=10, height=2, font=("黑体", 12), bg="#F0F8FF", fg="blue",  command=self.video_play)
        button.place(x=140, y=220)


    def video_play(self):

        res = self.cbx_2.get()
        path = self.channels[res]
        # re.match()匹配正则，是否满足条件
        if re.match(r"https?:/{2}\w.+$", self.url.get()):
            # 路径加密：把中文、特殊字符转化成二进制
            ip = parse.quote_plus(self.url.get())
            # 调用本地浏览器
            # https://v.qq.com/x/cover/nbusftujqwczi7y.html
            webbrowser.open(url=path + ip)
        else:
            msgbox.showerror(title="错误", message="视频地址无效，请重新输入")


    def run(self):

        ##显示出来
        self.window.mainloop()





if __name__ == '__main__':
    v = VipVideo()
    v.run()